#include <stdio.h>
#include <string.h>

// 加密
void CaesarEncrypt(char *Msg, int shift)
{
    for (int i = 0; i < strlen(Msg); i++)
    {
        if (Msg[i] >= 'a' && Msg[i] <= 'z')
        {
            Msg[i] = (Msg[i] - 'a' + shift) % 26 + 'a';
        }
        else if (Msg[i] >= 'A' && Msg[i] <= 'Z')
        {
            Msg[i] = (Msg[i] - 'A' + shift) % 26 + 'A';
        }
    }
}

// 解密
void CaesarDecrypt(char *Msg, int shift)
{
    CaesarEncrypt(Msg, -shift);
}

// 尝试解密
void TryDecrypt(char *Msg)
{
    int shift = 0;
    for (shift = 0; shift < 26; shift++)
    {
        char Msg2[100] = { 0 };
        strcpy(Msg2, Msg);// 防止字符串被修改
        CaesarEncrypt(Msg, shift);
        printf("偏移%d后的信息为：%s\n", shift, Msg);
    }  
}


int main()
{
    char Msg[100] = { 0 };
    printf("请输入要加密的信息：\n");
    scanf("%s", Msg);

    int shift = 0;
    printf("请输入要偏移的位数：\n");
    scanf("%d", &shift);

    // 加密
    CaesarEncrypt(Msg, shift);
    printf("加密后的信息为：%s\n", Msg);


    // 解密
    CaesarDecrypt(Msg, shift);
    printf("解密后的信息为：%s\n", Msg);


    // 尝试解密
    TryDecrypt(Msg);

    return 0;
}